这里我们讨论下php中__autoload和spl_autoload_register的区别, 当然并不是很完善, 毕竟比较复杂, 但是能用就行.

__autoload作用

在php的早期是没有spl_autoload_register函数的, 只有__autoload函数, 作用是自动加载类库.

当我们php文件中要引入其他类库时, 往往需要使用require_once来手动加载, 但当类库很多, 这样就显得繁琐, 往往一个文件要使用十几个require_once, 为了避免这种情况我们可以使用__autoload函数, 来实现自动加载.

__autoload应用举例

  1. 实现__autoload函数, 当php加载某个没注册的类时, 会自动调用, 并默认传入类的全路径的namespace加类名, 我们可以通过解析namespace和类名找到文件位置

    function __autoload($namespaceWithClassName){ //伪代码解析得到文件位置 $filePath = parse($namespaceWithClassName); //加载 if(is_file($filePath)){ require_once($filePath); } }

  2. 下面有两个文件, 文件一实现了一个类, 文件二调用了该类, 由于我们实现了__autoload函数, 所以在文件二中不需要用require引入文件一, php会自动调用__autoload函数执行, 自动加载文件一, 这样就能使我们代码非常简洁

spl_autoload_register的作用

spl_autoload_register的全名是 standard php library autoload register, 意思是php标注库的autoload注册函数, 其实就是__autoload的升级版本, 和__autoload作用一样.

我们仔细观察__autoload就能发现该函数的缺点:

  1. 必须实现__autoload, 而不能随心所欲的实现自己喜欢名称的函数

  2. 全局只有实现一个自动加载函数, 不能实现多个自动加载函数, 不够灵活

  3. 自动加载函数不能卸载, 不够灵活, 使用spl_autoload_register注册的自动加载函数, 可以被spl_autoload_unregister卸载掉

说白了, spl_autoload_register就是为了解决__autoload不够灵活的缺点, 通过spl_autoload_register可以注册多个自动加载函数, 并且能根据情况灵活调用

spl_autoload_register应用举例

  1. 实现多个自动加载函数, 函数名随意取, 但是要记住, php还是会默认传入全路路径namespace加类名做为参数.

    //自动加载函数1 function my_autoload_func_first($namespaceWithClassName){ //加载逻辑 ... }

    //自动加载函数2 function my_autoload_func_second($namespaceWithClassName){ //加载逻辑 ... }

  2. 使用spl_autoload_register注册上面的加载函数

    spl_autoload_register(my_autoload_func_first) spl_autoload_register(my_autoload_func_second)

总结

反正使用spl_autoload_register就对了

参考资料

PHP中spl_autoload_register()函数用法实例详解

What is Autoloading; How do you use spl_autoload, __autoload and spl_autoload_register?

THE END
推荐文章
  • 黄帝内经-第十一篇-五脏别论篇

  • 黄帝内经-脉要精微论-望闻问切四诊法(1)

  • MySQL添加外键失败,错误代码:1452

  • 通过禁用浏览器的javascript,来破解网站debug反爬虫措施

  • 怎么让 html-webpack-plugin 不执行模板的 ejs 语句, 而是保持原样?

  • docker compose启动的容器使用固定IP

  • html-webpack-plugin插件不解析img的src

  • 揭秘网络赚钱的本质

评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

新增

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

0字

新增

0字

0字

0字

0字

新增

0字

0字